/* Soubor je ulozen v kodovani UTF-8.
 * Kontrola kódování: Příliš žluťoučký kůň úpěl ďábelské ódy.
 */
package cz.pecinovsky.english.pojj.adv_demo.gui._04_abstract._0;

import cz.pecinovsky.english.pojj.adv_framework.gui_stage.IGUI_04;
import cz.pecinovsky.english.pojj.adv_framework.gui_stage.IGUI_04_Pane;

import java.awt.event.ActionListener;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;



/*******************************************************************************
 * Instance třídy {@code InputPane} představují vstupní panely GUI,
 * které ovládá hru vyhovující rámci
 *
 * @author    Rudolf PECINOVSKÝ
 * @version   0.00.000
 */
@SuppressWarnings("serial")
class InputPane extends JPanel implements IGUI_04_Pane
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================

    /** GUI, které daný panel používá. */
    private final IGUI_04 gui;

    /** Vstupní textové pole, do nějž uživatel zapisuje své příkazy. */
    private final JTextField inputField = new JTextField(25);



//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří vstupní panel, který bude používán v zadnaém GUI.
     *
     * @param gui GUI, které bude daný panel používat
     * @param inputListener Posluchač, který bude ragovat na příkazy
     *                      zadané do tohoto vstupního pole
     */
    InputPane(IGUI_04 gui,  ActionListener inputListener)
    {
        this.gui = gui;
        inputField.addActionListener(inputListener);

        JLabel prompt     = new JLabel("Zadej příkaz: ");

        add(prompt);
        add(inputField);
    }



//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================

    /***************************************************************************
     * Vrátí obsah vstupního textového pole,
     * tj. naposledy zadaný příkaz nebo prázdný řetězec.
     *
     * @return Obsah vstupního textového pole
     */
    String getText()
    {
        return inputField.getText();
    }


    /***************************************************************************
     * Vloží zadaný text do vstupního pole jako by jej tam vložil uživatel.
     *
     * @param text Text vkládaný do vstupního pole
     */
    void setText(String text)
    {
        inputField.setText(text);
    }



//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================

    /***************************************************************************
     * Inicializuje oblast zobrazující vstupní textové pole.
     */
    @Override
    public void initialize()
    {
        //Tato oblast prozatím nepotřebuje zvláštní inicializaci
        //Metoda je definována především kvůli sjednocení přístupu
        //k jednotlivým panelům a z toho vyplývajícího zpřehlednění programu
        //Kdyby se v budoucnu něco změnilo, stačí doplnit její tělo
        //a není třeba procházet celým programem a zjišťovat,
        //kde by bylo vhodné chybějící metodu doplnit
    }


    /***************************************************************************
     * Aktualizuje oblast zobrazující vstupní textové pole.
     * V této verzi stačí vstupní pole vyčistit a připravit pro další vstup.
     */
    @Override
    public void update()
    {
        inputField.setText("");
        inputField.requestFocus();
    }



//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== INTERNÍ DATOVÉ TYPY =======================================================
//== TESTY A METODA MAIN =======================================================
//
//    /***************************************************************************
//     * Testovací metoda.
//     */
//    public static void test()
//    {
//        BagPane_2 inst = new BagPane_2();
//    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )  {  test();  }
}
